const MyPromise = require('./MyPromise');

// let promise = new MyPromise((resolve, reject) => {
//   // resolve('success');
//   // throw new Error('404');
//   // setTimeout(() => {
//   //   resolve('setTimeout');
//   // }, 2000);
//   // resolve('hello');
// });

// promise.then(
//   (value) => {
//     return new MyPromise((resolve, reject) => {
//       resolve(value);
//     });
//     // return 'this is x';
//   },
//   (reason) => {
//     console.log(reason);
//   }
// );

// let promise1 = new MyPromise((resolve, reject) => {
//   // resolve('promise1');
//   reject(new Error('Error'));
// });

// let promise2 = promise1.then(
//   (value) => {
//     // return promise2; //报错TypeError: Chaining cycle detected for pormise
//     // return 1;
//     // return { a: 1 };
//     // return new Promise((resolve) => {
//     //   resolve('hello');
//     // });
//     // return new Promise((resolve, reject) => {
//     //   resolve('hello');
//     //   reject('error');
//     // });
//     // return new MyPromise((resolve, reject) => {
//     //   resolve(
//     //     new MyPromise((resolve) => {
//     //       resolve('hello');
//     //     })
//     //   );
//     // });
//     return value;
//   },
//   (reason) => {
//     return reason;
//   }
// );

// promise2.then(
//   (value) => console.log(value),
//   (reason) => console.log(reason)
// );

// promise1
//   .then()
//   .then()
//   .then()
//   .then(
//     (value) => console.log('result:', value),
//     (reason) => console.log('result:', reason)
//   );

// promise1
//   .then(
//     (value) => {},
//     (reason) => {
//       throw reason;
//     }
//   )
//   .catch((err) => {
//     console.log(err);
//   });

// const p = new MyPromise((resolve, reject) => {
//   resolve(
//     new MyPromise((resolve, reject) => {
//       setTimeout(() => {
//         resolve('The answer has been come out.');
//       }, 2000);
//     })
//   );
// });

// p.then((res) => {
//   console.log(res);
// });

// MyPromise.resolve('hello').then((res) => {
//   console.log(res);
// });

// MyPromise.resolve(
//   new MyPromise((resolve, reject) => {
//     setTimeout(() => {
//       resolve('hello promise');
//     }, 0);
//   })
// ).then((res) => {
//   console.log(res);
// });

// MyPromise.reject('wrong').then((res) => {
//   console.log(res);
// });
